/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.uc.manager;

import com.xy.biz.uc.domain.bo.UserBO;
import com.xy.biz.uc.domain.query.UserCodeQuery;
import com.xy.biz.uc.domain.query.UserIdQuery;
import com.xy.biz.uc.domain.query.UserQuery;
import com.xy.biz.uc.domain.req.RemoveUserGroupUserRelRequest;
import com.xy.lang.domain.Result;

import java.util.Collection;
import java.util.List;

/**
 *
 *
 * @author zsp
 * @date 2020-8-19
 */
public interface UserManager {

	/**
	 * 保存
	 *
	 * @param userBO
	 */
	int saveUser(UserBO userBO);

	/**
	 * 更新
	 *
	 * @param userBO
	 */
	int updateUser(UserBO userBO);

	/**
	 * 禁闭/解禁用户
	 *
	 * @param userBO
	 */
	int lockUser(UserBO userBO);

	/**
	 * 更新用户基础信息
	 *
	 * @param userBO
	 */
	int updateUserBaseInfo(UserBO userBO);

	/**
	 * 删除
	 *
	 * @param userId
	 */
	int deleteUser(Long userId);

	/**
	 * 判断用户名是否已存在
	 *
	 * @param userCode
	 * @return
	 */
	boolean isUserCodeExists(String userCode);

	/**
	 * 判断手机是否已存在
	 *
	 * @param mobile
	 * @return
	 */
	boolean isMobileExists(String mobile);

	/**
	 * 判断邮件是否已存在
	 *
	 * @param email
	 * @return
	 */
	boolean isEmailExists(String email);

	/**
	 * 查找一个
	 *
	 * @param userIdQuery
	 * @return
	 */
	UserBO getUser(UserIdQuery userIdQuery);

	/**
	 * 查找一个
	 *
	 * @param userCodeQuery
	 * @return
	 */
	UserBO getUserByUserCode(UserCodeQuery userCodeQuery);

	/**
	 * 查找一个
	 *
	 * @param query
	 * @return
	 */
	UserBO getUserByName(UserQuery query);

	List<UserBO> getUserByNameS(Collection<String> collection);

	/**
	 * 查找多个
	 *
	 * @param userIdQuery
	 */
	List<UserBO> listUserById(UserIdQuery userIdQuery);

	/**
	 * 查找多个
	 *
	 * @param query 查找条件
	 */
	List<UserBO> listUser(UserQuery query);

	/**
	 * 统计个数
	 *
	 * @param query 查找条件
	 */
	int countUser(UserQuery query);

	/**
	 * 查找多个
	 *
	 * @param collection
	 */
	List<UserBO> listUserByRoleId(Collection<Long> collection);

	/**
	 *
	 * @param userId
	 * @return
	 */
	List<Long> listRoleIdByUserId(Long userId);

	/**
	 *
	 * @param userGroupId
	 * @param userId
	 * @return
	 */
	int saveUserGroupUser(Long userGroupId, Long userId);

	/**
	 *
	 * @param userId
	 * @return
	 */
	int deleteUserGroupUser(Long userId);

	/**
	 *
	 * @param userId
	 * @return
	 */
	Long getUserGroupId(Long userId);

    /**
     *
     * @param userQuery
     * @return
     */
    List<UserBO> searchUser(UserQuery userQuery);


	/**
	 * 按userName模糊查询统计个数
	 *
	 * @param query 查找条件
	 */
	int countSearchUser(UserQuery query);

	List<UserBO> getUsersByGroupId(Long userGroupId);

	List<UserBO> getUsersByGroupIds(Collection<Long> userGroupIds);

	int removeUserGroupUserRel(RemoveUserGroupUserRelRequest request);


	Collection<Long> listUserIdByUserGroupId(Collection<Long> collection);
}
